import { AxiosBase } from '@zealforchange/axiospackage'
import type { statusCodeProcessingCore } from '@zealforchange/axiospackage'

import { CONSOLE_REQUEST_ENABLE, CONSOLE_RESPONSE_ENABLE, AXIOS_DEFAULT_CONFIG } from '..'

const errorStatusCodeProcessingMap: statusCodeProcessingCore = new Map()

errorStatusCodeProcessingMap.set(401, {
  async fn() {},
  defaultFn() {},
})

export const axiosInstance = new AxiosBase({
  ...AXIOS_DEFAULT_CONFIG,
  errorStatusCodeProcessing: errorStatusCodeProcessingMap,
  tranform: {
    // 请求前
    requestInterceptors(requestConfig) {
      CONSOLE_REQUEST_ENABLE && console.info('requestInterceptorFunc', `url: ${requestConfig.url}`, requestConfig)
      // 自定义请求拦截逻辑，可以处理权限，请求发送监控等
      return requestConfig
    },
    // 响应成功
    responseInterceptors(response) {
      CONSOLE_RESPONSE_ENABLE && console.info('responseInterceptorFunc', `url: ${response.request.responseURL}`, response)
      // 自定义响应成功逻辑，全局拦截接口，根据不同业务做不同处理，响应成功监控等
      return Promise.resolve(response.data)
    },
    // 请求失败
    requestInterceptorsCatch(requestError) {
      // 自定义发送请求失败逻辑，断网，请求发送监控等
      return Promise.reject(requestError)
    },
    responseInterceptorsCatch(responseError) {
      // 响应失败，可根据 responseError.message 和 responseError.response.status 来做监控处理
      return Promise.reject(responseError)
    },
  },
})
